package com.tank.jdk8.stream;

import java.util.Arrays;
import java.util.List;

/**
 * (1)流框架底层机制
 * (2)流框架中断路操作
 * Created with IntelliJ IDEA.
 * User: SuQiEr
  Date:2017/2/12
 * Time: 10:44
 * To change this template use File | Settings | File Templates.
 */
public class StreamTest7 {


    public static void main(String[] args) {

        List<String> list  = Arrays.asList("hello","world","hello world");
        /**
         * 需求：找出集合中元素长度为5的第一个元素
         * 分析:
         * 1:转换 将集合中的元素转换为其长度
         *2：过滤筛选 筛选长度等于5的元素
         *3：限制 或查找 第一个元素'
         *
         */



        /**
        list.stream().map(item ->  item.length()).filter(item -> item == 5).limit(1).forEach(System.out::println);
        // 输出结果
        //5
        */

        /**
        list.stream().map(item ->  item.length()).filter(item -> item == 6).limit(1).forEach(System.out::println);
        // 输出结果
        //
        */

        /**
        list.stream().map(item ->
                item.length()).filter(item -> item == 5).findFirst().ifPresent(item -> System.out.println(item));
        // 输出结果
        //5
         */

        /**
         * 分析流中的断路操作
         * (1) 流框架会将stream中的每个操作放到框架的集合中，会对每个元素分别执行操作
         * (2)流中会有 断路操作 ，如果执行已经满足到设定的条件，则不将继续向后执行
         */

        /***/
        list.stream().map(item ->{
            System.out.println("item:"+item);
          return          item.length();
        }).filter(item -> item == 5).findFirst().ifPresent( System.out::println);
        //预期输出结果
      //  "hello",
        // "world",
        // "hello world"
        //5'


        // 输出结果
//        item:hello
//        5


    }
}

